// /**
//  * 事件管理系统使用示例
//  * 
//  * @author AI Assistant
//  * @date 2025-11-30
//  */

// import { Component, _decorator } from 'cc';
// import { EventBus, GameEvent } from './EventBus';
// import { EventListener, EventListenerOnce, AutoCleanupEvents } from './EventDecorator';
// import { EventManager } from './EventManager';

// const { ccclass } = _decorator;

// // ==================== 示例 1: 基础用法 ====================

// /**
//  * 基础事件发布和订阅
//  */
// export class BasicExample {
//     public static run() {
//         console.log('========== 基础示例 ==========');

//         // 1. 订阅事件
//         const unsubscribe = EventBus.on('test:hello', (data) => {
//             console.log('收到消息:', data.message);
//         });

//         // 2. 发布事件
//         EventBus.emit('test:hello', { message: '你好，世界！' });

//         // 3. 取消订阅
//         unsubscribe();

//         // 4. 再次发布（不会触发）
//         EventBus.emit('test:hello', { message: '不会显示' });
//     }
// }

// // ==================== 示例 2: 优先级 ====================

// /**
//  * 事件优先级示例
//  */
// export class PriorityExample {
//     public static run() {
//         console.log('========== 优先级示例 ==========');

//         // 低优先级
//         EventBus.on('test:priority', () => {
//             console.log('3. 低优先级（默认 0）');
//         });

//         // 高优先级
//         EventBus.on('test:priority', () => {
//             console.log('1. 高优先级（100）');
//         }, { priority: 100 });

//         // 中优先级
//         EventBus.on('test:priority', () => {
//             console.log('2. 中优先级（50）');
//         }, { priority: 50 });

//         // 触发事件
//         EventBus.emit('test:priority');
//     }
// }

// // ==================== 示例 3: 一次性监听 ====================

// /**
//  * 一次性事件监听示例
//  */
// export class OnceExample {
//     public static run() {
//         console.log('========== 一次性监听示例 ==========');

//         // 只触发一次
//         EventBus.once('test:once', () => {
//             console.log('只会打印一次');
//         });

//         // 第一次触发
//         EventBus.emit('test:once');

//         // 第二次触发（不会执行）
//         EventBus.emit('test:once');
//     }
// }

// // ==================== 示例 4: 事件取消 ====================

// /**
//  * 事件取消示例
//  */
// export class CancelExample {
//     public static run() {
//         console.log('========== 事件取消示例 ==========');

//         // 监听器 1：检查权限
//         EventBus.on('test:action', (data) => {
//             console.log('检查权限...');
//             if (!data.hasPermission) {
//                 console.log('权限不足，取消操作');
//                 return false;  // 返回 false 取消事件
//             }
//         }, { priority: 100 });

//         // 监听器 2：执行操作
//         EventBus.on('test:action', () => {
//             console.log('执行操作');
//         });

//         // 测试 1：有权限
//         console.log('\n测试 1: 有权限');
//         EventBus.emit('test:action', { hasPermission: true });

//         // 测试 2：无权限
//         console.log('\n测试 2: 无权限');
//         const cancelled = EventBus.emit('test:action', { hasPermission: false });
//         console.log('事件是否被取消:', cancelled);
//     }
// }

// // ==================== 示例 5: 异步事件 ====================

// /**
//  * 异步事件处理示例
//  */
// export class AsyncExample {
//     public static async run() {
//         console.log('========== 异步事件示例 ==========');

//         // 异步监听器 1
//         EventBus.on('test:async', async (data) => {
//             console.log('开始异步处理 1...');
//             await this.delay(1000);
//             console.log('异步处理 1 完成:', data.value);
//         });

//         // 异步监听器 2
//         EventBus.on('test:async', async (data) => {
//             console.log('开始异步处理 2...');
//             await this.delay(500);
//             console.log('异步处理 2 完成:', data.value);
//         });

//         // 发布异步事件
//         console.log('发布异步事件...');
//         await EventBus.emitAsync('test:async', { value: 42 });
//         console.log('所有异步处理完成！');
//     }

//     private static delay(ms: number): Promise<void> {
//         return new Promise(resolve => setTimeout(resolve, ms));
//     }
// }

// // ==================== 示例 6: Cocos Creator 组件集成 ====================

// /**
//  * 手动订阅和清理
//  */
// @ccclass('ManualCleanupComponent')
// export class ManualCleanupComponent extends Component {
//     onLoad() {
//         // 订阅事件（指定 target）
//         EventBus.on(GameEvent.PLAYER_LEVEL_UP, this.onLevelUp, { 
//             target: this 
//         });

//         EventBus.on(GameEvent.COIN_CHANGED, this.onCoinChanged, { 
//             target: this,
//             priority: 10
//         });
//     }

//     onDestroy() {
//         // 清理该组件的所有事件
//         EventBus.offByTarget(this);
//     }

//     private onLevelUp(data: any) {
//         console.log('玩家升级:', data);
//     }

//     private onCoinChanged(data: any) {
//         console.log('金币变化:', data);
//     }
// }

// /**
//  * 使用装饰器（推荐）
//  */
// @ccclass('DecoratorComponent')
// @AutoCleanupEvents  // 自动清理
// export class DecoratorComponent extends Component {
//     // 自动订阅和取消订阅
//     @EventListener(GameEvent.PLAYER_LEVEL_UP)
//     private onLevelUp(data: any) {
//         console.log('玩家升级（装饰器）:', data);
//     }

//     // 带优先级
//     @EventListener(GameEvent.PLAYER_DAMAGED, { priority: 100 })
//     private onDamaged(data: any) {
//         console.log('玩家受伤（高优先级）:', data);
//     }

//     // 一次性监听
//     @EventListenerOnce(GameEvent.GAME_START)
//     private onGameStart() {
//         console.log('游戏开始（只触发一次）');
//     }
// }

// // ==================== 示例 7: 玩家系统 ====================

// /**
//  * 玩家数据
//  */
// interface PlayerData {
//     id: number;
//     name: string;
//     level: number;
//     exp: number;
//     hp: number;
//     maxHp: number;
//     coin: number;
// }

// /**
//  * 玩家管理器
//  */
// export class PlayerManager {
//     private player: PlayerData = {
//         id: 1,
//         name: 'Player',
//         level: 1,
//         exp: 0,
//         hp: 100,
//         maxHp: 100,
//         coin: 0
//     };

//     /**
//      * 增加经验
//      */
//     public addExp(amount: number) {
//         this.player.exp += amount;
//         console.log(`获得 ${amount} 经验`);

//         // 检查升级
//         const expForNextLevel = this.getExpForNextLevel();
//         if (this.player.exp >= expForNextLevel) {
//             this.levelUp();
//         }
//     }

//     /**
//      * 升级
//      */
//     private levelUp() {
//         this.player.level++;
//         this.player.exp -= this.getExpForNextLevel();
//         this.player.maxHp += 10;
//         this.player.hp = this.player.maxHp;

//         console.log(`升级到 ${this.player.level} 级！`);

//         // 发布升级事件
//         EventBus.emit(GameEvent.PLAYER_LEVEL_UP, {
//             level: this.player.level,
//             maxHp: this.player.maxHp
//         });
//     }

//     /**
//      * 受到伤害
//      */
//     public takeDamage(damage: number) {
//         this.player.hp -= damage;
//         console.log(`受到 ${damage} 伤害，剩余 HP: ${this.player.hp}`);

//         // 发布受伤事件
//         EventBus.emit(GameEvent.PLAYER_DAMAGED, {
//             damage,
//             currentHp: this.player.hp,
//             maxHp: this.player.maxHp
//         });

//         // 检查死亡
//         if (this.player.hp <= 0) {
//             this.die();
//         }
//     }

//     /**
//      * 死亡
//      */
//     private die() {
//         console.log('玩家死亡！');
//         EventBus.emit(GameEvent.PLAYER_DIED, {
//             playerId: this.player.id
//         });
//     }

//     /**
//      * 增加金币
//      */
//     public addCoin(amount: number) {
//         this.player.coin += amount;
//         console.log(`获得 ${amount} 金币，当前: ${this.player.coin}`);

//         EventBus.emit(GameEvent.COIN_CHANGED, {
//             amount: this.player.coin,
//             delta: amount
//         });
//     }

//     /**
//      * 获取升级所需经验
//      */
//     private getExpForNextLevel(): number {
//         return this.player.level * 100;
//     }

//     /**
//      * 获取玩家数据
//      */
//     public getPlayerData(): PlayerData {
//         return { ...this.player };
//     }
// }

// // ==================== 示例 8: UI 系统 ====================

// /**
//  * UI 管理器
//  */
// export class UIManager {
//     private openedUIs: Set<string> = new Set();

//     constructor() {
//         // 监听 UI 事件
//         EventBus.on(GameEvent.UI_OPEN, this.onUIOpen, { target: this });
//         EventBus.on(GameEvent.UI_CLOSE, this.onUIClose, { target: this });
//     }

//     /**
//      * 打开 UI
//      */
//     public openUI(uiName: string, data?: any) {
//         console.log(`请求打开 UI: ${uiName}`);

//         // 发布事件（可能被拦截）
//         const cancelled = EventBus.emit(GameEvent.UI_OPEN, {
//             uiName,
//             data
//         });

//         if (!cancelled) {
//             this.doOpenUI(uiName, data);
//         } else {
//             console.log(`打开 ${uiName} 被取消`);
//         }
//     }

//     /**
//      * 关闭 UI
//      */
//     public closeUI(uiName: string) {
//         if (!this.openedUIs.has(uiName)) {
//             console.log(`${uiName} 未打开`);
//             return;
//         }

//         console.log(`关闭 UI: ${uiName}`);
//         this.openedUIs.delete(uiName);

//         EventBus.emit(GameEvent.UI_CLOSE, { uiName });
//     }

//     /**
//      * 实际打开逻辑
//      */
//     private doOpenUI(uiName: string, data?: any) {
//         console.log(`打开 UI: ${uiName}`, data);
//         this.openedUIs.add(uiName);
//     }

//     /**
//      * UI 打开事件处理
//      */
//     private onUIOpen(data: any) {
//         console.log(`[UIManager] UI 打开事件:`, data);
//     }

//     /**
//      * UI 关闭事件处理
//      */
//     private onUIClose(data: any) {
//         console.log(`[UIManager] UI 关闭事件:`, data);
//     }
// }

// // ==================== 示例 9: 局部事件总线 ====================

// /**
//  * 战斗场景（使用局部事件总线）
//  */
// export class BattleScene {
//     private battleEvents: EventManager;
//     private enemies: any[] = [];

//     constructor() {
//         // 创建局部事件总线
//         this.battleEvents = EventManager.create();
//     }

//     /**
//      * 进入战斗
//      */
//     public enter() {
//         console.log('进入战斗场景');

//         // 订阅局部事件
//         this.battleEvents.on('enemy:spawn', this.onEnemySpawn);
//         this.battleEvents.on('enemy:killed', this.onEnemyKilled);
//         this.battleEvents.on('skill:cast', this.onSkillCast);

//         // 开始战斗
//         EventBus.emit(GameEvent.BATTLE_START);
//     }

//     /**
//      * 离开战斗
//      */
//     public exit() {
//         console.log('离开战斗场景');

//         // 清空局部事件总线
//         this.battleEvents.clear();

//         // 发布全局事件
//         EventBus.emit(GameEvent.BATTLE_END, {
//             victory: this.enemies.length === 0
//         });
//     }

//     /**
//      * 生成敌人
//      */
//     public spawnEnemy(enemyId: number) {
//         this.battleEvents.emit('enemy:spawn', { enemyId });
//     }

//     /**
//      * 击杀敌人
//      */
//     public killEnemy(enemyId: number) {
//         this.battleEvents.emit('enemy:killed', { enemyId });
//         EventBus.emit(GameEvent.ENEMY_KILLED, { enemyId });
//     }

//     private onEnemySpawn = (data: any) => {
//         console.log('[战斗] 敌人生成:', data.enemyId);
//         this.enemies.push(data.enemyId);
//     };

//     private onEnemyKilled = (data: any) => {
//         console.log('[战斗] 敌人被击杀:', data.enemyId);
//         const index = this.enemies.indexOf(data.enemyId);
//         if (index !== -1) {
//             this.enemies.splice(index, 1);
//         }
//     };

//     private onSkillCast = (data: any) => {
//         console.log('[战斗] 技能释放:', data);
//     };
// }

// // ==================== 运行所有示例 ====================

// /**
//  * 运行所有示例
//  */
// export class EventExampleRunner {
//     public static runAll() {
//         console.log('\n==================== 事件系统示例 ====================\n');

//         // 基础示例
//         BasicExample.run();
//         console.log('\n');

//         // 优先级示例
//         PriorityExample.run();
//         console.log('\n');

//         // 一次性监听示例
//         OnceExample.run();
//         console.log('\n');

//         // 事件取消示例
//         CancelExample.run();
//         console.log('\n');

//         // 异步事件示例
//         AsyncExample.run().then(() => {
//             console.log('\n');

//             // 玩家系统示例
//             this.runPlayerExample();
//             console.log('\n');

//             // UI 系统示例
//             this.runUIExample();
//             console.log('\n');

//             // 战斗场景示例
//             this.runBattleExample();
//             console.log('\n');

//             console.log('==================== 示例完成 ====================\n');
//         });
//     }

//     /**
//      * 玩家系统示例
//      */
//     private static runPlayerExample() {
//         console.log('========== 玩家系统示例 ==========');

//         const playerManager = new PlayerManager();

//         // 监听玩家事件
//         EventBus.on(GameEvent.PLAYER_LEVEL_UP, (data) => {
//             console.log(`[UI] 显示升级特效！等级: ${data.level}`);
//         });

//         EventBus.on(GameEvent.PLAYER_DAMAGED, (data) => {
//             console.log(`[UI] 更新血条: ${data.currentHp}/${data.maxHp}`);
//         });

//         EventBus.on(GameEvent.PLAYER_DIED, () => {
//             console.log('[UI] 显示死亡界面');
//         });

//         // 模拟游戏流程
//         playerManager.addExp(50);
//         playerManager.addCoin(100);
//         playerManager.addExp(60);  // 升级
//         playerManager.takeDamage(30);
//         playerManager.takeDamage(80);  // 死亡
//     }

//     /**
//      * UI 系统示例
//      */
//     private static runUIExample() {
//         console.log('========== UI 系统示例 ==========');

//         const uiManager = new UIManager();

//         // 权限检查拦截器
//         EventBus.on(GameEvent.UI_OPEN, (data) => {
//             if (data.uiName === 'shop' && !this.hasPermission('shop')) {
//                 console.log('[拦截器] 没有权限打开商店');
//                 return false;  // 取消打开
//             }
//         }, { priority: 100 });

//         // 测试
//         uiManager.openUI('bag');
//         uiManager.openUI('shop');  // 被拦截
//         uiManager.closeUI('bag');
//     }

//     /**
//      * 战斗场景示例
//      */
//     private static runBattleExample() {
//         console.log('========== 战斗场景示例 ==========');

//         const battle = new BattleScene();

//         // 监听全局战斗事件
//         EventBus.once(GameEvent.BATTLE_START, () => {
//             console.log('[全局] 战斗开始！');
//         });

//         EventBus.once(GameEvent.BATTLE_END, (data) => {
//             console.log('[全局] 战斗结束！胜利:', data.victory);
//         });

//         // 进入战斗
//         battle.enter();
//         battle.spawnEnemy(1);
//         battle.spawnEnemy(2);
//         battle.killEnemy(1);
//         battle.killEnemy(2);
//         battle.exit();
//     }

//     /**
//      * 权限检查（示例）
//      */
//     private static hasPermission(feature: string): boolean {
//         return false;  // 模拟无权限
//     }
// }

// /**
//  * 默认导出
//  */
// export default EventExampleRunner;

